import cac from 'cac'

const cli = cac()

/**
 * 练习 <> 和 [] 的区别
 *
 * 在命令 command中， <> 表示必填参数， [] 表示选填参数
 *
 *
 *  node 03.mjs deploy test --scale 测试选填参数
 *
 * 也可以执行
 *  node 03.mjs deploy test
 *
 * node 03.mjs deploy test --scale true
 *
 * 下面的 action里面 接收的是字符串 'true'
 *
 *  node 03.mjs deploy 1 --scale 222  options.scale 是数字 222
 */

cli.command('deploy <folder>', '部署一个目录到某个服务器上')
  .option('--scale [level]', '扫描层级')
  .action((folder, options) => {
    console.log(folder);
    console.log(options);
  })

/**
 * node 03.mjs build
 * 因为命令的参数是选填，所以执行上面的，不会报错
 *
 * 给定项目名称 -project 为 ./src
 * node 03.mjs build ./src
 *
 * 只给定选项
 * node 03.mjs build --out dist
 *
 * node 03.mjs build --help
 *
 * 完整案例
 * node 03.mjs build ./src --out dist
 *
 * node 03.mjs build ./src --out 2  out参数在options中解析为数字2
 * node 03.mjs build ./src --out true  out参数在options中解析为字符串 true
 *
 * 下面是在 option选项中使用 尖括号 <>  表示 --out 参数接收的是 字符串或者数字
 */
cli.command('build [project]', '构建一个项目-项目名称选填')
  .option('--out <dir>', '指定输出目录')
  .action((project, options) => {
    console.log(project);
    console.log(options);
  })

cli.help()

cli.parse()